Applications and/or controls may act as clients of local and/or remote data sources to display lists of items from those data sources. As used herein, a list is an ordered sequence of items, and a client can be an application and/or control. The data is obtained from each data source using one of many different interfaces or protocols, and presented to the end user with a user interface for navigating through and perhaps modifying the list. Depending on the data source, an item may be fetched using its index in the list and/or using a “key” that is different for each item and that does not change for the item. Some data sources, such as local data sources, can respond synchronously to requests for data, with the data source passing the requested data to the items manager before the items manager resumes execution. Such responses to data requests typically take less time than some response time threshold, such as a threshold that is low enough that a presentation of the response can appear to be in real time with the corresponding request. For example, such responses may take on the order of tens of milliseconds or less. Other data sources, such as remote data sources, may respond asynchronously, with the items manager resuming execution after the request and receiving the requested data from the data source at a later time. Such responses to data requests typically take more time than the response time threshold discussed above. The data source may or may not generate notifications for the application when changes are made to the data in the list. For example, web servers typically do not provide clients with change notifications when data is changed.